home *** CD-ROM | disk | FTP | other *** search
/ The Atari Compendium / The Atari Compendium (Toad Computers) (1994).iso / files / umich / tex / td187src.lzh / PICTEX.I < prev    next >
Text File  |  1991-12-14  |  36KB  |  1,025 lines

  1. IMPLEMENTATION MODULE Pictex ;
  2.  
  3. (*
  4.    Dieses Modul ist (C)'91 by Jens Pirnay
  5.    Entstanden am  :  1990
  6.    Funktion       :  Übersetzung der Objekte in PiCTeX-Befehle
  7.    Änderungen     : 18/11/90
  8.    Benutzte Ideen :
  9. *)
  10.  
  11. FROM BezierCurve IMPORT ComputeRealBezier;
  12. FROM Dialoge     IMPORT BusyStart, BusyEnd;
  13. FROM FileIO      IMPORT Close, Rewrite, WriteLn;
  14. FROM File        IMPORT InsertFile;
  15. FROM Types       IMPORT TextPosTyp, DrawObjectTyp, ExtendedArraySize,
  16.                         ObjectPtrTyp, ObjectSet;
  17. IMPORT CommonData ;
  18. IMPORT Diverses ;
  19. IMPORT GetFile ;
  20. IMPORT MathLib0 ;
  21. IMPORT ObjectUtilities ;
  22. IMPORT MagicStrings ;
  23. IMPORT MagicSys ;
  24. IMPORT Variablen ;
  25.  
  26. (**
  27. IMPORT PDebug;
  28. **)
  29. (* Index 1 und 2 bezeichen immer den Referenzpunkt                         *)
  30. (* Index 8 zumeist die Liniendicke, Index 9 die Textlänge so vorhanden     *)
  31. (*      0         |   3    |   4   |   5   |   6   |   7   |   8   |   9   *)
  32. (* ---------------+--------+-------+---------------+-------+-------+------ *)
  33. (* Picture        | XExt   | YExt  |objekte|unitlen|       |       |       *)
  34. (* Text           |        |       |       |       |AlignFl|       |Textlen*)
  35. (* Line           |        |       |       |       |       |       |       *)
  36. (* Arrow          |        |       |       |       |       |       |       *)
  37. (* Circle         | Radius |       |       |       |       |       |       *)
  38. (* Disk           | Radius |       |       |       |       |       |       *)
  39. (* Oval           | Radius | Posit.|       |       |       |       |       *)
  40. (* Filledbox      | XExt   | XExt  |       |       |       |       |       *)
  41. (* Ovalbox        | XExt   | YExt  |       |       |       |       |       *)
  42. (* Framebox       | XExt   | YExt  |Textpos|MBxFlag|AlignFl|       |Textlen*)
  43. (* Dashbox        | XExt   | Yext  |Textpos|       |AlignFl|       |Textlen*)
  44. (* Beziercurve    |  X2    |  Y2   |  X3   |  Y3   |Points |       |       *)
  45. (* Bezierellipse  |  X2    |  Y2   |  X3   |  Y3   |Points |       |       *)
  46. (* EpicSolidLine  | Pts-1  |       |       |       |       |       |MarkTL *)
  47. (* EpicDottedLine | Pts-1  |       |       |       |       |       |   "   *)
  48. (* EpicDashedLine | Pts-1  |       |       |       |       |       |   "   *)
  49. (* EpicGrid       | Xext   | YExt  |DeltaX |DeltaY |       |       |       *)
  50.  
  51. CONST NUL  =  0C ;
  52.       LF   = 12C ;
  53.       CR   = 15C ;
  54.       CNTR = 0;
  55.       LEFT = 1;
  56.       RGHT = 2;
  57.       TOP  = 1;
  58.       BOT  = 2;
  59.       BASE = 3;
  60.  
  61.  
  62. VAR OutLine , Part , String  : ARRAY [0..255] OF CHAR ;
  63.     Handle , i , j : INTEGER ;
  64.     Bool     : BOOLEAN ;
  65.     LatexObs : BOOLEAN;
  66.     Object   : ObjectPtrTyp ;
  67.     Width    : INTEGER ;  (* Liniendicke *)
  68.  
  69. (**********************************************************)
  70. (**
  71. PROCEDURE AppendChar(c : CHAR; VAR target : ARRAY OF CHAR);
  72. VAR temp : ARRAY [0..1] OF CHAR;
  73. BEGIN
  74.   temp[0] := c;
  75.   temp[1] := 0C;
  76.   MagicStrings.Append(temp, target);
  77. END AppendChar;
  78. **)
  79. (**********************************************************)
  80.  
  81. PROCEDURE GetCoord(VAR Str : ARRAY OF CHAR;
  82.                    X, Y    : INTEGER;
  83.                    dx, dy  : INTEGER;
  84.                    cx, cy  : INTEGER);
  85. (* cx : 0 = center , 1 = left    , 2 = right                   *)
  86. (* cy : 0 = center , 1 = topedge , 2 = baseedge , 3 = Baseline *)
  87. VAR temp   : ARRAY [0..127] OF CHAR;
  88.     number : ARRAY [0..19]  OF CHAR;
  89. BEGIN
  90.   temp := '} ';
  91.   IF (cx<>CNTR) OR (cy<>CNTR) THEN
  92. (*    AppendChar('[',temp);*)
  93.     MagicStrings.Append('[',temp);
  94. (*    IF cx=LEFT THEN AppendChar('l', temp); END;*)
  95.     IF cx=LEFT THEN MagicStrings.Append('l', temp); END;
  96. (*    IF cx=RGHT THEN AppendChar('r', temp); END;*)
  97.     IF cx=RGHT THEN MagicStrings.Append('r', temp); END;
  98. (*    IF cy=TOP  THEN AppendChar('t', temp); END;*)
  99.     IF cy=TOP  THEN MagicStrings.Append('t', temp); END;
  100. (*    IF cy=BOT  THEN AppendChar('b', temp); END;*)
  101.     IF cy=BOT  THEN MagicStrings.Append('b', temp); END;
  102. (*    IF cy=BASE THEN AppendChar('B', temp); END;*)
  103.     IF cy=BASE THEN MagicStrings.Append('B', temp); END;
  104.     MagicStrings.Append ('] ',temp);
  105.   END;
  106.   IF (dx<>0) OR (dy<>0) THEN
  107.     Variablen.SimpleValueToStr(dx, number);
  108. (*    AppendChar('<',temp);*)
  109.     MagicStrings.Append('<',temp);
  110.     MagicStrings.Append ( number, temp);
  111. (*    AppendChar(',',temp);*)
  112.     MagicStrings.Append(',',temp);
  113.     Variablen.SimpleValueToStr(dy, number);
  114.     MagicStrings.Append ( number, temp);
  115.     MagicStrings.Append ('> ',temp);
  116.   END;
  117.   MagicStrings.Append ('at ',temp);
  118.   Variablen.SimpleValueToStr(X, number);
  119.   MagicStrings.Append (number,temp);
  120. (*  AppendChar(' ',temp);*)
  121.   MagicStrings.Append(' ',temp);
  122.   Variablen.SimpleValueToStr(Y, number);
  123.   MagicStrings.Append (number,temp);
  124.   MagicStrings.Assign (temp, Str);
  125. END GetCoord;
  126.  
  127. (**********************************************************)
  128.  
  129. PROCEDURE GetText (VAR TextStr : ARRAY OF CHAR;
  130.                    Object      : ObjectPtrTyp ) ;
  131. VAR temp : ARRAY [0..255] OF CHAR;
  132.     insert : ARRAY [0..19] OF CHAR;
  133.     i, j, len : INTEGER;
  134.     lines     : BOOLEAN;
  135. BEGIN
  136.   temp := '';
  137.   len := Object^.Code[9];
  138.   lines := FALSE;
  139.   IF len>0 THEN
  140.     i := 0;
  141.     j := 0;
  142.     WHILE (i<len) DO
  143.       IF (i<len-1) AND (Object^.CPtr^ [ i ] = '\') AND
  144.                        (Object^.CPtr^ [ i+1 ] = '\') THEN
  145.         lines := TRUE;
  146.         INC(i, 1);
  147.         temp[j]   := '\';
  148.         temp[j+1] := 'c';
  149.         temp[j+2] := 'r';
  150.         temp[j+3] := ' ';
  151.         INC(j, 3);
  152.        ELSE
  153.         temp[j] := Object^.CPtr^ [ i ];
  154.       END;
  155.       INC(i, 1);
  156.       INC(j, 1);
  157.       temp[j] := 0C;
  158.     END;
  159.     IF lines THEN
  160.       CASE Object^.Code[7] OF
  161.         1 : insert := '\lines [l] {';|
  162.         2 : insert := '\lines [r] {';|
  163.        ELSE
  164.         insert := '\lines{';
  165.       END;
  166.       MagicStrings.Insert(insert, temp, 0);
  167.       MagicStrings.Append ( '\cr}', temp);
  168.     END;
  169.   END;
  170.   MagicStrings.Assign (temp, TextStr);
  171. END GetText;
  172.  
  173. (**********************************************************)
  174.  
  175. PROCEDURE FromTo(VAR txt : ARRAY OF CHAR;
  176.                  x1, y1, x2, y2 : INTEGER);
  177. VAR temp   : ARRAY [0..99] OF CHAR;
  178.     number : ARRAY [0..19] OF CHAR;
  179. BEGIN
  180.   temp := 'from ';
  181.   Variablen.SimpleValueToStr(x1, number);
  182.   MagicStrings.Append ( number, temp);
  183.   Variablen.SimpleValueToStr(y1, number);
  184. (*  AppendChar(' ', temp);*)
  185.   MagicStrings.Append(' ', temp);
  186.   MagicStrings.Append ( number, temp);
  187.   Variablen.SimpleValueToStr(x2, number);
  188.   MagicStrings.Append ( ' to ', temp);
  189.   MagicStrings.Append ( number, temp);
  190.   Variablen.SimpleValueToStr(y2, number);
  191. (*  AppendChar(' ', temp);*)
  192.   MagicStrings.Append(' ', temp);
  193.   MagicStrings.Append ( number, temp);
  194.   MagicStrings.Assign (temp , txt);
  195. END FromTo;
  196.  
  197. (**********************************************************)
  198.  
  199. PROCEDURE FromTo10(VAR txt : ARRAY OF CHAR;
  200.                    x1, y1, x2, y2 : MagicSys.lINTEGER);
  201. VAR temp   : ARRAY [0..99] OF CHAR;
  202.     number : ARRAY [0..19] OF CHAR;
  203. BEGIN
  204.   temp := 'from ';
  205.   Variablen.SimpleValue10ToStr(x1, number);
  206.   MagicStrings.Append ( number, temp);
  207.   Variablen.SimpleValue10ToStr(y1, number);
  208. (*  AppendChar(' ', temp);*)
  209.   MagicStrings.Append(' ', temp);
  210.   MagicStrings.Append ( number, temp);
  211.   Variablen.SimpleValue10ToStr(x2, number);
  212.   MagicStrings.Append ( ' to ', temp);
  213.   MagicStrings.Append ( number, temp);
  214.   Variablen.SimpleValue10ToStr(y2, number);
  215. (*  AppendChar(' ', temp);*)
  216.   MagicStrings.Append(' ', temp);
  217.   MagicStrings.Append ( number, temp);
  218.   MagicStrings.Assign (temp , txt);
  219. END FromTo10;
  220.  
  221. (**********************************************************)
  222.  
  223. PROCEDURE Rule(x1, y1, x2, y2 : INTEGER);
  224. VAR number : ARRAY [0..99] OF CHAR;
  225. BEGIN
  226.   OutLine := '\putrule ';
  227.   FromTo(number, x1, y1, x2, y2);
  228.   MagicStrings.Append ( number, OutLine);
  229.   WriteLn(Handle, OutLine);
  230. END Rule;
  231.  
  232. (**********************************************************)
  233.  
  234. PROCEDURE DoubleArrow(x1, y1, x2, y2 : INTEGER);
  235. VAR X1, Y1, X2, Y2, xtmp, ytmp : MagicSys.lINTEGER;
  236.     numb